package ar.com.seminario.dao;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import ar.com.seminario.common.persistence.dao.GenericDao;
import ar.com.seminario.model.SolicitudIngreso;
import ar.com.seminario.model.enumerados.EstadoSolicitud;
import ar.com.seminario.systema.model.Usuario;

/**
 * Clase de acceso a datos para la entidad {@link Usuario}.
 * 
 * @author Dario Camarro
 * 
 */

public class SolicitudIngresoDao extends GenericDao<SolicitudIngreso, Long> {
	
	@SuppressWarnings("unchecked")
	public List<SolicitudIngreso> getSolicitudesPorFechaSolicitud(Date fechaSolicitud) {
		
		final Criteria criteria = this.getSession().createCriteria(SolicitudIngreso.class);
		criteria.add(Restrictions.between("fechaSolicitud",fechaSolicitud, fechaSolicitud));
		return criteria.list();
		
	}
	
	public SolicitudIngreso getSolicitudPorId(Long idSolicitud) {
		
		final Criteria criteria = this.getSession().createCriteria(SolicitudIngreso.class);
		criteria.add(Restrictions.eq("id",idSolicitud));
		return (SolicitudIngreso)criteria.uniqueResult();
		
	}

	@SuppressWarnings("unchecked")
	public List<SolicitudIngreso> getAllForAnalista() {

		final Criteria criteria = this.getSession().createCriteria(SolicitudIngreso.class);
		criteria.add(Restrictions.eq("estadoSolicitudId", EstadoSolicitud.APROBADA.getId()));
		
		return criteria.list();
	}

	@SuppressWarnings("unchecked")
	public List<SolicitudIngreso> getAllSolicitudesAprobadas() {
		
		final Criteria criteria = this.getSession().createCriteria(SolicitudIngreso.class);
		criteria.add(Restrictions.eq("estadoSolicitudId", EstadoSolicitud.APROBADA.getId()));
		
		return criteria.list();
	}

	@SuppressWarnings("unchecked")
	public List<SolicitudIngreso> getAllForAuditor() {
		
		final Criteria criteria = this.getSession().createCriteria(SolicitudIngreso.class);
		criteria.add(Restrictions.eq("estadoSolicitudId", EstadoSolicitud.ABIERTA.getId()));
		
		return criteria.list();
	}
	
	@SuppressWarnings("unchecked")
	public List<SolicitudIngreso> getAllForColaborador() {
		
		final Criteria criteria = this.getSession().createCriteria(SolicitudIngreso.class);
		criteria.add(Restrictions.in("estadoSolicitudId", 
				Arrays.asList(EstadoSolicitud.ABIERTA.getId(),EstadoSolicitud.APROBADA.getId())));
		
		return criteria.list();
	}
	

}
